home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / reuse.lha / reuse / m2c / General.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  3KB  |  226 lines

  1. #include "SYSTEM_.h"
  2.  
  3. #ifndef DEFINITION_Arguments
  4. #include "Arguments.h"
  5. #endif
  6.  
  7. #ifndef DEFINITION_System
  8. #include "System.h"
  9. #endif
  10.  
  11. #ifndef DEFINITION_General
  12. #include "General.h"
  13. #endif
  14.  
  15. INTEGER General_MaxAlign;
  16. struct General_1 General_AlignMasks;
  17.  
  18. static struct S_1 {
  19.     CHAR C_0_char;
  20.     LONGREAL longreal;
  21. } ForAlign;
  22. static SHORTCARD argc;
  23. static Arguments_ArgTable argv;
  24.  
  25.  
  26. INTEGER General_Min
  27. # ifdef __STDC__
  28. (INTEGER a, INTEGER b)
  29. # else
  30. (a, b)
  31. INTEGER a, b;
  32. # endif
  33. {
  34.   if (a <= b) {
  35.     return a;
  36.   } else {
  37.     return b;
  38.   }
  39. }
  40.  
  41. INTEGER General_Max
  42. # ifdef __STDC__
  43. (INTEGER a, INTEGER b)
  44. # else
  45. (a, b)
  46. INTEGER a, b;
  47. # endif
  48. {
  49.   if (a >= b) {
  50.     return a;
  51.   } else {
  52.     return b;
  53.   }
  54. }
  55.  
  56. CARDINAL General_Log2
  57. # ifdef __STDC__
  58. (LONGINT x)
  59. # else
  60. (x)
  61. LONGINT x;
  62. # endif
  63. {
  64.   CARDINAL y;
  65.  
  66.   y = 0;
  67.   if (x >= 65536) {
  68.     INC1(y, 16);
  69.     x = x / 65536;
  70.   }
  71.   if (x >= 256) {
  72.     INC1(y, 8);
  73.     x = x / 256;
  74.   }
  75.   if (x >= 16) {
  76.     INC1(y, 4);
  77.     x = x / 16;
  78.   }
  79.   if (x >= 4) {
  80.     INC1(y, 2);
  81.     x = x / 4;
  82.   }
  83.   if (x >= 2) {
  84.     INC1(y, 1);
  85.     x = x / 2;
  86.   }
  87.   return y;
  88. }
  89.  
  90. CARDINAL General_AntiLog
  91. # ifdef __STDC__
  92. (LONGINT x)
  93. # else
  94. (x)
  95. LONGINT x;
  96. # endif
  97. {
  98.   CARDINAL y;
  99.  
  100.   y = 0;
  101.   if (x % 65536 == 0) {
  102.     INC1(y, 16);
  103.     x = x / 65536;
  104.   }
  105.   if (x % 256 == 0) {
  106.     INC1(y, 8);
  107.     x = x / 256;
  108.   }
  109.   if (x % 16 == 0) {
  110.     INC1(y, 4);
  111.     x = x / 16;
  112.   }
  113.   if (x % 4 == 0) {
  114.     INC1(y, 2);
  115.     x = x / 4;
  116.   }
  117.   if (x % 2 == 0) {
  118.     INC1(y, 1);
  119.     x = x / 2;
  120.   }
  121.   return y;
  122. }
  123.  
  124. LONGINT General_Exp2
  125. # ifdef __STDC__
  126. (CARDINAL x)
  127. # else
  128. (x)
  129. CARDINAL x;
  130. # endif
  131. {
  132.   LONGINT y;
  133.  
  134.   y = 1;
  135.   if (x >= 16) {
  136.     DEC1(x, 16);
  137.     y = y * 65536;
  138.   }
  139.   if (x >= 8) {
  140.     DEC1(x, 8);
  141.     y = y * 256;
  142.   }
  143.   if (x >= 4) {
  144.     DEC1(x, 4);
  145.     y = y * 16;
  146.   }
  147.   if (x >= 2) {
  148.     DEC1(x, 2);
  149.     y = y * 4;
  150.   }
  151.   if (x >= 1) {
  152.     DEC1(x, 1);
  153.     y = y * 2;
  154.   }
  155.   return y;
  156. }
  157.  
  158. REAL General_Exp10
  159. # ifdef __STDC__
  160. (INTEGER x)
  161. # else
  162. (x)
  163. INTEGER x;
  164. # endif
  165. {
  166.   REAL y;
  167.   BOOLEAN negative;
  168.  
  169.   negative = x < 0;
  170.   x = ABSLI(x);
  171.   y = 1.0;
  172.   if (x >= 16) {
  173.     DEC1(x, 16);
  174.     y = y * 1.0E16;
  175.   }
  176.   if (x >= 16) {
  177.     DEC1(x, 16);
  178.     y = y * 1.0E16;
  179.   }
  180.   if (x >= 8) {
  181.     DEC1(x, 8);
  182.     y = y * 1.0E8;
  183.   }
  184.   if (x >= 4) {
  185.     DEC1(x, 4);
  186.     y = y * 1.0E4;
  187.   }
  188.   if (x >= 2) {
  189.     DEC1(x, 2);
  190.     y = y * 1.0E2;
  191.   }
  192.   if (x >= 1) {
  193.     DEC1(x, 1);
  194.     y = y * 1.0E1;
  195.   }
  196.   if (negative) {
  197.     return 1.0 / y;
  198.   } else {
  199.     return y;
  200.   }
  201. }
  202.  
  203. void BEGIN_General()
  204. {
  205.   static BOOLEAN has_been_called = FALSE;
  206.  
  207.   if (!has_been_called) {
  208.     has_been_called = TRUE;
  209.  
  210.     BEGIN_Arguments();
  211.     BEGIN_System();
  212.  
  213.     General_MaxAlign = (CARDINAL)ADR(ForAlign.longreal) - (CARDINAL)ADR(ForAlign.C_0_char);
  214.     General_AlignMasks.A[1] = (BITSET)(LONGCARD)0XFFFFFFFF;
  215.     General_AlignMasks.A[2] = (BITSET)(LONGCARD)0XFFFFFFFE;
  216.     General_AlignMasks.A[3] = (BITSET)(LONGCARD)0XFFFFFFFF;
  217.     General_AlignMasks.A[4] = (BITSET)(LONGCARD)0XFFFFFFFC;
  218.     General_AlignMasks.A[5] = (BITSET)(LONGCARD)0XFFFFFFFF;
  219.     General_AlignMasks.A[6] = (BITSET)(LONGCARD)0XFFFFFFFF;
  220.     General_AlignMasks.A[7] = (BITSET)(LONGCARD)0XFFFFFFFF;
  221.     General_AlignMasks.A[8] = (BITSET)(LONGCARD)0XFFFFFFF8;
  222.     GetArgs(&argc, &argv);
  223.     PutArgs((LONGCARD)argc, (ADDRESS)argv);
  224.   }
  225. }
  226.